Skip to content

Latest commit

 

History

History

05.06.Convert Integer

commentsdifficultyedit_url
true
简单

English Version

题目描述

整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。

示例1:

 输入:A = 29 (或者0b11101), B = 15(或者0b01111)  输出:2 

示例2:

 输入:A = 1,B = 2  输出:2 

提示:

  1. A,B范围在[-2147483648, 2147483647]之间

解法

方法一:位运算

我们将 A 和 B 进行异或运算,得到的结果的二进制表示中 $1$ 的个数即为需要改变的位数。

时间复杂度 $O(\log n)$,其中 $n$ 为 A 和 B 的最大值。空间复杂度 $O(1)$

Python3

classSolution: defconvertInteger(self, A: int, B: int) ->int: A&=0xFFFFFFFFB&=0xFFFFFFFFreturn (A^B).bit_count()

Java

classSolution { publicintconvertInteger(intA, intB) { returnInteger.bitCount(A ^ B); } }

C++

classSolution { public:intconvertInteger(int A, int B) { unsignedint c = A ^ B; return__builtin_popcount(c); } };

Go

funcconvertInteger(Aint, Bint) int { returnbits.OnesCount32(uint32(A^B)) }

TypeScript

functionconvertInteger(A: number,B: number): number{letres=0;while(A!==0||B!==0){if((A&1)!==(B&1)){res++;}A>>>=1;B>>>=1;}returnres;}

Rust

implSolution{pubfnconvert_integer(a:i32,b:i32) -> i32{(a ^ b).count_ones()asi32}}

Swift

classSolution{func convertInteger(_ A:Int, _ B:Int)->Int{return(Int32(A) ^ Int32(B)).nonzeroBitCount }}
close